﻿using System;
using System.ComponentModel;
using System.Windows.Forms;
using System.IO;
using ConfigProject;
using System.Diagnostics;
using System.Threading;

namespace UpdateProject
{
    public partial class TienTrinh : Form
    {
        CauHinh ch;
        public static int trangthai = 0;
        public static string versionmoi = "";
        public static string versioncu = "";
        public static string duongdancauhinh = "";

        public TienTrinh()
        {
            InitializeComponent();
            ch = new CauHinh();
            versioncu = ch.getversioncu(Directory.GetCurrentDirectory() + @"\Version.txt");
            duongdancauhinh = ch.getduongdancauhinh(Directory.GetCurrentDirectory() + @"\CauHinh.txt");
            versionmoi = ch.getversionmoi("Version.txt", duongdancauhinh);
            backgroundWorker1 = new BackgroundWorker();
            backgroundWorker1.WorkerReportsProgress = true;
            backgroundWorker1.WorkerSupportsCancellation = true;

            backgroundWorker1.DoWork += backgroundWorker1_DoWork;
            backgroundWorker1.ProgressChanged += backgroundWorker1_ProgressChanged;
            backgroundWorker1.RunWorkerCompleted += backgroundWorker1_RunWorkerCompleted;
        }

        #region RunEXE
        public void runexe(string exepath)
        {
            try
            {
                ProcessStartInfo startInfo = new ProcessStartInfo();
                startInfo.FileName = exepath;
                Process.Start(startInfo);
            }
            catch (Exception ex)
            {
                MessageBox.Show("Lỗi " + ex.ToString(), "Cảnh Báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
        #endregion

        #region backgroundWorker1_ProgressChanged
        private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            if (!backgroundWorker1.CancellationPending)
            {
                //lblThongbao.Text = "Hoàn Thành Được " + e.ProgressPercentage + "% Tiến Trình Update Chương Trình Từ Version ";
                lblThongbao.Text = String.Format("Hoàn Thành Được {0}% Tiến Trình Update Chương Trình Từ Version {1} lên {2}", e.ProgressPercentage, versioncu, versionmoi);
                //lblPercent.Text = e.ProgressPercentage + "%";
                 //progressBar1.PerformStep();
            }
        }
        #endregion

        #region backgroundWorker1_RunWorkerCompleted
        private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            MessageBox.Show("Tiến trình cập nhật thành công !!! ", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
            this.Close();
            runexe(Application.StartupPath + @"\TKCCLD.EXE");
        }
        #endregion

        #region backgroundWorker1_DoWork
        private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            int lancopy = 0;
            while (progressBar1.Value < progressBar1.Maximum)
            {
                if (backgroundWorker1.CancellationPending)
                {
                    break;
                }
                //báo cáo tiến độ của tiến trình
                if (lancopy == 0)
                {
                    try
                    {
                        ch.CopyFolder(duongdancauhinh, Application.StartupPath);
                        lancopy = 1;
                    }
                    catch
                    {
                        lancopy = 0;
                    }
                }
                progressBar1.Value = progressBar1.Value + 1;
                backgroundWorker1.ReportProgress(progressBar1.Value);
                Thread.Sleep(100);//toc do load cua progressBar1
            }
        }
        #endregion

        #region Evenclick
        private void btnCancel_Click(object sender, EventArgs e)
        {
            DialogResult kq = MessageBox.Show("Bạn có chắc hủy tiến trình cập nhật không?", "Thông Báo", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
            if (kq == DialogResult.Yes)
            {
                trangthai = 1;
                MessageBox.Show("Tiến trình cập nhật đã được hủy !!! ", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                backgroundWorker1.CancelAsync();
                backgroundWorker1.Dispose();
                this.Close();//close form
                runexe(Application.StartupPath + @"\TKCCLD.EXE");
            }
            else
            {
                trangthai = 0;
            }
        }
        #endregion

        #region FormClosing
        private void TienTrinh_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (backgroundWorker1.IsBusy && trangthai == 0)
            {
                DialogResult kq = MessageBox.Show("Bạn có chắc hủy tiến trình cập nhật không?", "Thông Báo", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                if (kq == DialogResult.Yes)
                {
                    MessageBox.Show("Tiến trình cập nhật đã được hủy !!! ", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    backgroundWorker1.CancelAsync();
                    backgroundWorker1.Dispose();
                    runexe(Application.StartupPath + @"\TKCCLD.EXE");
                }
            }
        }
        #endregion

        #region FormLoad
        private void TienTrinh_Load(object sender, EventArgs e)
        {
            backgroundWorker1.RunWorkerAsync();
        }
        #endregion
    }
}
